package de.gof.ppstool.lagerverwaltung.db;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;
import javax.persistence.*;
import de.gof.ppstool.fertigungsverwaltung.db.Fertigungsauftrag;

/**
 * The persistent class for the arbeitsplatz database table.
 */
@Entity
@NamedQueries({
		@NamedQuery(name = Arbeitsplatz.FINDE_ALLE_ARBEITSPLAETZE, query = "SELECT DISTINCT a FROM Arbeitsplatz a"),
		@NamedQuery(name = Arbeitsplatz.FINDE_ARBEITSPLATZ_NACH_ID, query = "SELECT a FROM Arbeitsplatz a WHERE a.arbeitsplatzId = :"
				+ Arbeitsplatz.PARAM_ARBEITSPLATZ_ID) })
@Table(name = "arbeitsplatz")
public class Arbeitsplatz implements Serializable {
	static final String FINDE_ALLE_ARBEITSPLAETZE = "findeAlleArbeitsplaetze";
	static final String FINDE_ARBEITSPLATZ_NACH_ID = "findeArbeitsplatzNachid";
	static final String PARAM_ARBEITSPLATZ_ID = "arbeitsplatz_id";
	private static final long serialVersionUID = 1913494759327854721L;
	/**
	 * +++++++++++++++++++++++++++++++++++++++++++
	 * +++++ Attribute der Klasse Arbeitsplatz +++
	 * +++++++++++++++++++++++++++++++++++++++++++
	 */
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO, generator = "arbeitsplatz_sequence_name")
	@SequenceGenerator(name = "arbeitsplatz_sequence_name", sequenceName = "arbeitsplatz_arbeitsplatz_id_seq", allocationSize = 1)
	@Column(name = "arbeitsplatz_id", unique = true, nullable = false)
	private Long arbeitsplatzId;
	@OneToOne
	@JoinColumn(name = "aktuellerauftrag")
	private Fertigungsauftrag aktuellerAuftrag;
	@Column(length = 2147483647)
	private BigDecimal fixMaschinenkosten;
	@Column(length = 2147483647)
	private BigDecimal lohnklasse1;
	@Column(length = 2147483647)
	private BigDecimal lohnklasse2;
	@Column(length = 2147483647)
	private BigDecimal lohnklasse3;
	@Column(nullable = false, length = 2147483647)
	private Integer losgroese;
	@Column(length = 2147483647)
	private String zeitbedarfVorperiode;
	@Column(nullable = false, length = 2147483647)
	private String ruestzeit;
	@Column(nullable = false, length = 2147483647)
	private String fertigungszeit;
	@Column(length = 2147483647)
	private String ueberstunden;
	@Column(length = 2147483647)
	private String leerlaufzeit;
	@Column(length = 2147483647)
	private BigDecimal varMaschinenkosten;
	@OneToMany(mappedBy = "inWarteschlange", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
	private List<Fertigungsauftrag> warteschlangenAuftrage;

	/**
	 * +++++++++++++++++++++++++++++++++++++++++++++++
	 * +++++ Konstruktoren der Klasse Arbeitsplatz +++
	 * +++++++++++++++++++++++++++++++++++++++++++++++
	 */
	public Arbeitsplatz() {
		super();
	}

	public Arbeitsplatz(Long arbeitsplatzId,
			Fertigungsauftrag aktuellerAuftrag, BigDecimal fixMaschinenkosten,
			BigDecimal lohnklasse1, BigDecimal lohnklasse2,
			BigDecimal lohnklasse3, Integer losgroese,
			String zeitbedarfVorperiode, String ruestzeit, String ueberstunden,
			String leerlaufzeit, BigDecimal varMaschinenkosten,
			List<Fertigungsauftrag> warteschlangenAuftraege) {
		super();
		this.arbeitsplatzId = arbeitsplatzId;
		this.aktuellerAuftrag = aktuellerAuftrag;
		this.fixMaschinenkosten = fixMaschinenkosten;
		this.lohnklasse1 = lohnklasse1;
		this.lohnklasse2 = lohnklasse2;
		this.lohnklasse3 = lohnklasse3;
		this.losgroese = losgroese;
		this.zeitbedarfVorperiode = zeitbedarfVorperiode;
		this.ruestzeit = ruestzeit;
		this.ueberstunden = ueberstunden;
		this.leerlaufzeit = leerlaufzeit;
		this.varMaschinenkosten = varMaschinenkosten;
		this.setWarteschlangenAuftrage(warteschlangenAuftraege);
	}

	/**
	 * +++++++++++++++++++++++++++++	
	 * +++++ Getter und Setter +++++
	 * +++++++++++++++++++++++++++++
	 */
	public Long getArbeitsplatzId() {
		return this.arbeitsplatzId;
	}

	public void setArbeitsplatz_id(Long arbeitsplatzId) {
		this.arbeitsplatzId = arbeitsplatzId;
	}

	public Fertigungsauftrag getAktuellerauftrag() {
		return this.aktuellerAuftrag;
	}

	public void setAktuellerauftrag(Fertigungsauftrag aktuellerauftrag) {
		this.aktuellerAuftrag = aktuellerauftrag;
	}

	public BigDecimal getFixmaschinenkosten() {
		return this.fixMaschinenkosten;
	}

	public void setFixmaschinenkosten(BigDecimal fixMaschinenkosten) {
		this.fixMaschinenkosten = fixMaschinenkosten;
	}

	public BigDecimal getLohnklasse1() {
		return this.lohnklasse1;
	}

	public void setLohnklasse1(BigDecimal lohnklasse1) {
		this.lohnklasse1 = lohnklasse1;
	}

	public BigDecimal getLohnklasse2() {
		return this.lohnklasse2;
	}

	public void setLohnklasse2(BigDecimal lohnklasse2) {
		this.lohnklasse2 = lohnklasse2;
	}

	public BigDecimal getLohnklasse3() {
		return this.lohnklasse3;
	}

	public void setLohnklasse3(BigDecimal lohnklasse3) {
		this.lohnklasse3 = lohnklasse3;
	}

	public Integer getLosgroese() {
		return this.losgroese;
	}

	public void setLosgroese(Integer losgroese) {
		this.losgroese = losgroese;
	}

	public String getZeitbedarfVorperiode() {
		return this.zeitbedarfVorperiode;
	}

	public void setZeitbedarfVorperiode(String zeitbedarfVorperiode) {
		this.zeitbedarfVorperiode = zeitbedarfVorperiode;
	}

	public String getRuestzeit() {
		return this.ruestzeit;
	}

	public void setRuestzeit(String ruestzeit) {
		this.ruestzeit = ruestzeit;
	}

	public String getUeberstunden() {
		return this.ueberstunden;
	}

	public void setUeberstunden(String ueberstunden) {
		this.ueberstunden = ueberstunden;
	}

	public String getLeerlaufzeit() {
		return this.leerlaufzeit;
	}

	public void setLeerlaufzeit(String leerlaufzeit) {
		this.leerlaufzeit = leerlaufzeit;
	}

	public BigDecimal getVarmaschinenkosten() {
		return this.varMaschinenkosten;
	}

	public void setVarmaschinenkosten(BigDecimal varMaschinenkosten) {
		this.varMaschinenkosten = varMaschinenkosten;
	}

	public void setWarteschlangenAuftrage(
			List<Fertigungsauftrag> warteschlangenAuftrage) {
		this.warteschlangenAuftrage = warteschlangenAuftrage;
	}

	public List<Fertigungsauftrag> getWarteschlangenAuftrage() {
		return warteschlangenAuftrage;
	}

	public void setArbeitszeit(String fertigungszeit) {
		this.fertigungszeit = fertigungszeit;
	}

	public String getArbeitszeit() {
		return fertigungszeit;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result
				+ ((arbeitsplatzId == null) ? 0 : arbeitsplatzId.hashCode());
		result = prime
				* result
				+ ((fixMaschinenkosten == null) ? 0 : fixMaschinenkosten
						.hashCode());
		result = prime * result
				+ ((leerlaufzeit == null) ? 0 : leerlaufzeit.hashCode());
		result = prime * result
				+ ((lohnklasse1 == null) ? 0 : lohnklasse1.hashCode());
		result = prime * result
				+ ((lohnklasse2 == null) ? 0 : lohnklasse2.hashCode());
		result = prime * result
				+ ((lohnklasse3 == null) ? 0 : lohnklasse3.hashCode());
		result = prime * result
				+ ((losgroese == null) ? 0 : losgroese.hashCode());
		result = prime * result
				+ ((ruestzeit == null) ? 0 : ruestzeit.hashCode());
		result = prime * result
				+ ((ueberstunden == null) ? 0 : ueberstunden.hashCode());
		result = prime
				* result
				+ ((varMaschinenkosten == null) ? 0 : varMaschinenkosten
						.hashCode());
		result = prime
				* result
				+ ((zeitbedarfVorperiode == null) ? 0 : zeitbedarfVorperiode
						.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;

		if (obj == null)
			return false;

		if (getClass() != obj.getClass())
			return false;

		Arbeitsplatz other = (Arbeitsplatz) obj;
		if (arbeitsplatzId == null) {
			if (other.arbeitsplatzId != null)
				return false;

		} else if (!arbeitsplatzId.equals(other.arbeitsplatzId))
			return false;

		if (fixMaschinenkosten == null) {
			if (other.fixMaschinenkosten != null)
				return false;

		} else if (!fixMaschinenkosten.equals(other.fixMaschinenkosten))
			return false;

		if (leerlaufzeit == null) {
			if (other.leerlaufzeit != null)
				return false;

		} else if (!leerlaufzeit.equals(other.leerlaufzeit))
			return false;

		if (lohnklasse1 == null) {
			if (other.lohnklasse1 != null)
				return false;

		} else if (!lohnklasse1.equals(other.lohnklasse1))
			return false;

		if (lohnklasse2 == null) {
			if (other.lohnklasse2 != null)
				return false;

		} else if (!lohnklasse2.equals(other.lohnklasse2))
			return false;

		if (lohnklasse3 == null) {
			if (other.lohnklasse3 != null)
				return false;

		} else if (!lohnklasse3.equals(other.lohnklasse3))
			return false;

		if (losgroese == null) {
			if (other.losgroese != null)
				return false;

		} else if (!losgroese.equals(other.losgroese))
			return false;

		if (ruestzeit == null) {
			if (other.ruestzeit != null)
				return false;

		} else if (!ruestzeit.equals(other.ruestzeit))
			return false;

		if (ueberstunden == null) {
			if (other.ueberstunden != null)
				return false;

		} else if (!ueberstunden.equals(other.ueberstunden))
			return false;

		if (varMaschinenkosten == null) {
			if (other.varMaschinenkosten != null)
				return false;

		} else if (!varMaschinenkosten.equals(other.varMaschinenkosten))
			return false;

		if (zeitbedarfVorperiode == null) {
			if (other.zeitbedarfVorperiode != null)
				return false;

		} else if (!zeitbedarfVorperiode.equals(other.zeitbedarfVorperiode))
			return false;

		return true;
	}

	@Override
	public String toString() {
		return "Arbeitsplatz [arbeitsplatzId=" + arbeitsplatzId
				+ ", fixMaschinenkosten=" + fixMaschinenkosten
				+ ", leerlaufzeit=" + leerlaufzeit + ", lohnklasse1="
				+ lohnklasse1 + ", lohnklasse2=" + lohnklasse2
				+ ", lohnklasse3=" + lohnklasse3 + ", losgroese=" + losgroese
				+ ", ruestzeit=" + ruestzeit + ", ueberstunden=" + ueberstunden
				+ ", varMaschinenkosten=" + varMaschinenkosten
				+ ", zeitbedarfVorperiode=" + zeitbedarfVorperiode + "]";
	}

}
